# -*- coding: utf-8 -*-
"""
@Time    : 2024/6/26 13:44 
@Author  : ZhangShenao 
@File    : 5. 复用PromptTemplate.py 
@Desc    : 复用PromptTemplate
创建好的PromptTemplate可以进行复用
使用PipelinePromptTemplate可以进行多个PromptTemplate的编排
"""
from langchain_core.prompts import PromptTemplate, PipelinePromptTemplate

# 创建指令PromptTemplate
instruction_prompt_template = PromptTemplate.from_template('你正在模拟{person}')

# 创建示例PromptTemplate
example_prompt_template = PromptTemplate.from_template('''下面是一个交互的例子：
Q：{example_q}
A：{example_a}
''')

# 创建开始PromptTemplate
start_prompt_template = PromptTemplate.from_template('''现在，你是一个真实的人，请回答用户的问题：
Q：{input}
A: 
''')

# 创建完整PromptTemplate
full_prompt_template = PromptTemplate.from_template('''{instruction}
{example}
{start}
''')

# 创建PipelinePromptTemplate,进行模板编排
pipeline_prompt_template = PipelinePromptTemplate(pipeline_prompts=[
    ('instruction', instruction_prompt_template),
    ('example', example_prompt_template),
    ('start', start_prompt_template),
], final_prompt=full_prompt_template)

# 打印pipeline_prompt_template
print(f'pipeline_prompt_template: {pipeline_prompt_template}')

# 调用invoke()函数,填充变量,生成PromptValue
prompt_value = pipeline_prompt_template.invoke({
    'person': '雷军',
    'example_q': '你最喜欢的汽车是什么？',
    'example_a': '当然是小米SU7',
    'input': '你最喜欢的手机是什么？'
})

# 生成Prompt文本
prompt_text = prompt_value.to_string()
print(f'prompt_text: {prompt_text}')
